#ifndef __SEMAPHORE_H
#define __SEMAPHORE_H

#include "osEvent.h"

/* 信号量控制块*/
typedef struct _SEMAPHORE {
    
    EVENT_T         event;          // 事件控制块
    uint32_t        count;          // 信号量计数值
    uint32_t        maxCount;       // 最大计数值
} SEMAPHORE_T;

typedef struct _SEMAPHORE_INFO {
    uint32_t        count;          // 信号量计数值
    uint32_t        maxCount;       // 最大计数值
    uint32_t        taskCount;      // 信号量任务等待个数
} SEMAPHORE_INFO_T;


extern void     vSemaphoreInit(SEMAPHORE_T *sem, uint32_t startCount, uint32_t maxCount);
extern uint32_t vSemaphoreGetCount(SEMAPHORE_T *sem);
extern uint32_t vSemaphoreWait(SEMAPHORE_T *sem, uint32_t timeout);  
extern uint32_t vSemaphoreNoWaitGet (SEMAPHORE_T *sem);
extern void     vSemaphoreNotify(SEMAPHORE_T *sem);
extern void     vSemaphoreInfo(SEMAPHORE_T *sem, SEMAPHORE_INFO_T *info);



#endif // __SEMAPHORE_H

